// src/services/userService.js
import apiClient from './api' // 引入配置好的 Axios 实例

/**
 * 获取当前登录用户的完整信息 (包含角色和权限)
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getCurrentUserProfile = async () => {
  return await apiClient.get('/users/profile') // 假设后端有此端点
}

/**
 * 更新当前用户信息 (昵称, 签名, 头像)
 * @param {Object} profileData - 包含 nickname, signature, avatarUrl 的对象
 * @returns {Promise<AxiosResponse<any>>}
 */
export const updateProfile = async (profileData) => {
  return await apiClient.put('/users/profile', profileData) // 假设后端有此端点
}

/**
 * 获取当前用户的帖子列表 (分页)
 * @param {Object} params - 查询参数 (page, size, sort 等)
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getMyPosts = async (params = {}) => {
  return await apiClient.get('/users/me/posts', { params }) // 假设后端有此端点
}

/**
 * 获取当前用户的回复列表 (分页)
 * @param {Object} params - 查询参数 (page, size, sort 等)
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getMyReplies = async (params = {}) => {
  return await apiClient.get('/users/me/replies', { params }) // 假设后端有此端点
}

/**
 * 获取当前用户收藏的帖子列表 (分页)
 * @param {Object} params - 查询参数 (page, size, sort 等)
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getMyFavorites = async (params = {}) => {
  return await apiClient.get('/users/me/favorites', { params }) // 假设后端有此端点
}
export const getPublicUserInfoById = async (id) => {
  return await apiClient.get(`/users/${id}`)
}
// 可以在这里添加其他用户相关的 API 调用，例如：
// export const changePassword = async (oldPassword, newPassword) => { ... };
// export const getMyPosts = async (params) => { ... };
// export const getMyReplies = async (params) => { ... };
// export const getMyFavorites = async (params) => { ... };

/**
 * 上传用户头像
 * @param {FormData} formData - 包含头像文件的 FormData 对象
 * @returns {Promise<AxiosResponse<any>>}
 */
export const uploadAvatar = async (formData) => {
  // 注意：上传文件通常需要设置 Content-Type 为 multipart/form-data
  // 但使用 FormData 时，Axios 会自动设置正确的 Content-Type
  return await apiClient.post('/users/avatar/upload', formData, {
    headers: {
      'Content-Type': 'multipart/form-data', // Axios 通常会自动设置，但显式声明更保险
    },
  })
}
/**
 * 关注用户
 * @param {number} targetUserId - 目标用户 ID
 * @returns {Promise<AxiosResponse<any>>}
 */
export const followUser = async (targetUserId) => {
  return await apiClient.post(`/users/${targetUserId}/follow`)
}

/**
 * 取消关注用户
 * @param {number} targetUserId - 目标用户 ID
 * @returns {Promise<AxiosResponse<any>>}
 */
export const unfollowUser = async (targetUserId) => {
  return await apiClient.delete(`/users/${targetUserId}/follow`)
}

/**
 * 获取指定用户的关注列表 (分页)
 * @param {number} userId - 用户 ID
 * @param {Object} params - 查询参数 (page, size)
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getFollowing = async (userId, params = {}) => {
  return await apiClient.get(`/users/${userId}/following`, { params })
}

/**
 * 获取指定用户的粉丝列表 (分页)
 * @param {number} userId - 用户 ID
 * @param {Object} params - 查询参数 (page, size)
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getFollowers = async (userId, params = {}) => {
  return await apiClient.get(`/users/${userId}/followers`, { params })
}

/**
 * 检查当前用户是否已关注目标用户
 * @param {number} targetUserId - 目标用户 ID
 * @returns {Promise<AxiosResponse<any>>}
 */
export const isFollowing = async (targetUserId) => {
  return await apiClient.get(`/users/${targetUserId}/is-following`)
}

// --- 新增: 用户中心关注/粉丝相关 API 服务 ---
/**
 * (注册用户) 获取当前用户的关注数
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getMyFollowingCount = async () => {
  return await apiClient.get('/users/me/following/count')
}

/**
 * (注册用户) 获取当前用户的粉丝数
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getMyFollowerCount = async () => {
  return await apiClient.get('/users/me/followers/count')
}

/**
 * (注册用户) 分页获取当前用户的关注列表
 * @param {Object} params - 查询参数 (page, size)
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getMyFollowingList = async (params = {}) => {
  return await apiClient.get('/users/me/following', { params })
}

/**
 * (注册用户) 分页获取当前用户的粉丝列表
 * @param {Object} params - 查询参数 (page, size)
 * @returns {Promise<AxiosResponse<any>>}
 */
export const getMyFollowerList = async (params = {}) => {
  return await apiClient.get('/users/me/followers', { params })
}
// --- ---
